<!doctype html>
<html style='font-size:16px !important'>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>

<link href='https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --mermaid-theme: default; --mermaid-sequence-numbers: off; --mermaid-flowchart-curve: linear; --mermaid--gantt-left-padding: 75; --sequence-theme: simple; }
.tooltip[data-v-70836592] { cursor: pointer; position: relative; display: block; width: 100%; text-align: center; z-index: 10; }
.tooltip span[data-v-70836592] { border-bottom: 1px dotted; }
.tooltip[data-v-70836592]::after { display: none; content: attr(data-tooltip); background: rgb(232, 233, 233); max-width: 500px; width: 200px; position: absolute; left: -200px; right: 0px; margin: auto; opacity: 0; height: auto; font-size: 14px; padding: 10px; border-radius: 4px; color: rgb(17, 17, 17); text-align: left; }
.tooltip.bottom[data-v-70836592]::after { top: 80%; transition: opacity 0.3s ease 0.3s, top 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) 0.3s; }
.tooltip.bottom[data-v-70836592]:hover::after { display: block; top: 130%; opacity: 1; }
.lifeline .line[data-v-6efc771f] { background-size: 1px 20px; }
.zenuml .interaction { border: 0px dashed transparent; }
.zenuml .interaction.sync { border-right-width: 7px; }
.zenuml .interaction.inited-from-occurrence, .zenuml .interaction.self-invocation { border-left-width: 7px; }
.zenuml .interaction.return { border-left-width: 7px; border-right-width: 7px; }
.zenuml .interaction.return-to-start { border-left-width: 0px; }
.zenuml .interaction:hover { cursor: pointer; }
.zenuml .message { position: relative; }
.zenuml .message > .name { text-align: center; }
.zenuml .interaction.right-to-left > .occurrence { left: -14px; }
.zenuml .interaction.self > .occurrence { left: -8px; margin-top: -10px; }
.zenuml .fragment { border-width: 1px; margin: 8px 0px 0px; padding-bottom: 10px; }
.zenuml .sequence-diagram * { box-sizing: inherit; }
.zenuml .sequence-diagram { line-height: normal; }
.zenuml .participant { border-width: 2px; padding: 8px 4px; min-width: 88px; max-width: 250px; text-align: center; pointer-events: all; }
.no-fill svg.arrow polyline[data-v-ca07199a] { fill: none !important; }
.async > .message > .point > svg.arrow > polyline[data-v-ca07199a] { fill: none; }
.right-to-left.point[data-v-ca07199a] { left: 0px; right: auto; }
.right-to-left.point > svg > polyline.right[data-v-ca07199a] { display: none; }
.right-to-left.point > svg > polyline.left[data-v-ca07199a] { display: inline; }
.point > svg > polyline.left[data-v-ca07199a] { display: none; }
:root { --color-bg-base: #fff; --color-text-base: #000; --color-text-secondary: #333; --color-border-base: #000; }
.theme-default { --color-text-base: #222; --color-border-base: #666; --color-message-arrow: #000; --color-bg-occurrence: #dedede; }
.theme-mermaid { --color-bg-base: #fff; --color-text-base: #222; --color-border-base: #666; --color-bg-occurrence: #dedede; }
.theme-mermaid .footer { visibility: hidden; }
.theme-darcula { --color-bg-canvas: #ffffff; --color-bg-frame: #2b2b2b; --color-border-frame: #cccccc; --color-bg-title: #2b2b2b; --color-text-title: #f8f8f2; --color-bg-participant: #44475a; --color-text-participant: #f8f8f2; --color-border-participant: #cccccc; --color-text-message: #ffb86c; --color-message-arrow: #cccccc; --color-bg-message-hover: #a6d2ff; --color-text-message-hover: #174ad4; --color-text-comment: #666666; --color-bg-fragment-header: #44475a; --color-text-fragment: #8be9fd; --color-border-fragment: #cccccc; --color-bg-occurrence: #44475a; --color-border-occurrence: #555555; --color-text-link: #a6d2ff; --color-text-control: #e2ba88; }
.theme-sky { --color-bg-canvas: #ffffff; --color-bg-frame: #ffffff; --color-border-frame: #cccccc; --color-bg-title: #deecfb; --color-text-title: #032c72; --color-bg-participant: #deecfb; --color-text-participant: #032c72; --color-border-participant: #032c72; --color-text-message: #032c72; --color-message-arrow: #032c72; --color-bg-message-hover: #a6d2ff; --color-text-message-hover: #174ad4; --color-text-comment: #666666; --color-bg-fragment-header: #f0f0f0; --color-text-fragment: #032c72; --color-border-fragment: #032c72; --color-bg-occurrence: #deecfb; --color-border-occurrence: #555555; --color-text-link: #a6d2ff; --color-text-control: #a6d2ff; }
.theme-idle-afternoon { --color-bg-canvas: #d8dad9; --color-bg-frame: #d8dad9; --color-border-frame: #324939; --color-bg-title: #d8dad9; --color-text-title: #182e27; --color-bg-participant: #f3f5f7; --color-text-participant: #182e27; --color-border-participant: #182e27; --color-text-message: #030809; --color-message-arrow: #324939; --color-bg-message-hover: #aea690; --color-text-message-hover: #000000; --color-text-comment: #030809; --color-bg-fragment-header: #f0f0f0; --color-text-fragment: #182e27; --color-border-fragment: #344337; --color-bg-occurrence: #f3f5f7; --color-border-occurrence: #344337; --color-text-link: #344337; --color-text-control: #97a49b; }
.theme-coles { --color-bg-canvas: #ffffff; --color-bg-frame: #ffde00; --color-border-frame: #ee141f; --color-bg-title: #ffffff; --color-text-title: #182e27; --color-bg-participant: #f3f5f7; --color-text-participant: #000000; --color-border-participant: #344337; --color-text-message: #000000; --color-message-arrow: #000000; --color-bg-message-hover: #ee141f; --color-text-message-hover: #ffffff; --color-text-comment: #000000; --color-bg-fragment-header: #ee141f; --color-text-fragment: #ffffff; --color-border-fragment: #ee141f; --color-bg-occurrence: #f3f5f7; --color-border-occurrence: #344337; --color-text-link: #344337; --color-text-control: #97a49b; }
.theme-coles .footer { background-color: rgb(255, 255, 255); }
.theme-woolworths { --color-bg-canvas: #e6eaf3; --color-bg-frame: #e6eaf3; --color-border-frame: #049e50; --color-bg-title: #ffffff; --color-text-title: #12522f; --color-bg-participant: #aacb51; --color-text-participant: #000000; --color-border-participant: #344337; --color-text-message: #12522f; --color-message-arrow: #049e50; --color-bg-message-hover: #fffefb; --color-text-message-hover: #ffffff; --color-text-comment: #000000; --color-bg-fragment-header: #aacb51; --color-text-fragment: #12522f; --color-border-fragment: #049e50; --color-bg-occurrence: #aacb51; --color-border-occurrence: #344337; --color-text-link: #344337; --color-text-control: #335c80; }
.theme-anz { --color-bg-canvas: #ffffff; --color-bg-frame: #ffffff; --color-border-frame: #089fd8; --color-bg-title: #ffffff; --color-text-title: #006e9c; --color-bg-participant: #fcfdf8; --color-text-participant: #00abd8; --color-border-participant: #00abd8; --color-text-message: #42a4e0; --color-message-arrow: #089fd8; --color-bg-message-hover: #006e9c; --color-text-message-hover: #ffffff; --color-text-comment: #000000; --color-bg-fragment-header: #42a4e0; --color-text-fragment: #006e9c; --color-border-fragment: #089fd8; --color-bg-occurrence: #fcfdf8; --color-border-occurrence: #006e9c; --color-text-link: #c9d8e7; --color-text-control: #335c80; }
.theme-anz .fragment .header { color: rgb(255, 255, 255); }
.theme-nab { --color-bg-canvas: #f2f4f6; --color-bg-participant: #c30000; --color-text-participant: #ffffff; --color-border-participant: #c30000; --color-text-message: #c30000; --color-bg-fragment-header: #c30000; --color-text-fragment-header: #ffffff; }
.theme-google { --color-white: #ffffff; --color-red-google: #db4437; --color-blue-google: #4285f4; --color-green-google: #0f9d58; --color-yellow-google: #f4b400; --color-bg-canvas: var(--color-white); --color-bg-frame: #f2f4f6; --color-border-frame: #4285f4; --color-bg-title: #4285f4; --color-text-title: #ffffff; --color-bg-participant: var(--color-red-google); --color-text-participant: #ffffff; --color-border-participant: #4285f4; --color-text-message: var(--color-red-google); --color-message-arrow: var(--color-red-google); --color-bg-message-hover: #fffefb; --color-text-message-hover: #ffffff; --color-text-comment: #000000; --color-bg-fragment-header: var(--color-green-google); --color-text-fragment: #ffffff; --color-border-fragment: #4285f4; --color-bg-occurrence: #f4b400; --color-border-occurrence: #4285f4; --color-text-link: #c9d8e7; --color-text-control: #335c80; }
*, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; }
::-webkit-backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; }
::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; }
.container { width: 100%; }
@media (min-width: 640px) {
  .container { max-width: 640px; }
}
@media (min-width: 768px) {
  .container { max-width: 768px; }
}
@media (min-width: 1024px) {
  .container { max-width: 1024px; }
}
@media (min-width: 1280px) {
  .container { max-width: 1280px; }
}
@media (min-width: 1536px) {
  .container { max-width: 1536px; }
}
.zenuml .sr-only { position: absolute; width: 1px; height: 1px; padding: 0px; margin: -1px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap; border-width: 0px; }
.zenuml .pointer-events-none { pointer-events: none; }
.zenuml .pointer-events-auto { pointer-events: auto; }
.zenuml .invisible { visibility: hidden; }
.zenuml .fixed { position: fixed; }
.zenuml .absolute { position: absolute; }
.zenuml .relative { position: relative; }
.zenuml .sticky { position: sticky; }
.zenuml .inset-0 { inset: 0px; }
.zenuml .bottom-1 { bottom: 0.25rem; }
.zenuml .left-1 { left: 0.25rem; }
.zenuml .right-1 { right: 0.25rem; }
.zenuml .top-0 { top: 0px; }
.zenuml .top-8 { top: 2rem; }
.zenuml .left-1\/2 { left: 50%; }
.zenuml .right-0 { right: 0px; }
.zenuml .right-\[100\%\] { right: 100%; }
.zenuml .left-full { left: 100%; }
.zenuml .z-40 { z-index: 40; }
.zenuml .z-10 { z-index: 10; }
.zenuml .col-span-2 { grid-column: span 2 / span 2; }
.zenuml .col-span-1 { grid-column: span 1 / span 1; }
.zenuml .col-span-4 { grid-column: span 4 / span 4; }
.zenuml .float-right { float: right; }
.zenuml .m-1 { margin: 0.25rem; }
.zenuml .m-2 { margin: 0.5rem; }
.zenuml .m-auto { margin: auto; }
.zenuml .mx-auto { margin-left: auto; margin-right: auto; }
.zenuml .mx-2 { margin-left: 0.5rem; margin-right: 0.5rem; }
.zenuml .-my-px { margin-top: -1px; margin-bottom: -1px; }
.zenuml .ml-3 { margin-left: 0.75rem; }
.zenuml .mr-1 { margin-right: 0.25rem; }
.zenuml .ml-4 { margin-left: 1rem; }
.zenuml .mt-3 { margin-top: 0.75rem; }
.zenuml .mt-4 { margin-top: 1rem; }
.zenuml .mb-4 { margin-bottom: 1rem; }
.zenuml .mt-8 { margin-top: 2rem; }
.zenuml .-mt-12 { margin-top: -3rem; }
.zenuml .mt-1 { margin-top: 0.25rem; }
.zenuml .mb-0 { margin-bottom: 0px; }
.zenuml .mt-2 { margin-top: 0.5rem; }
.zenuml .box-border { box-sizing: border-box; }
.zenuml .block { display: block; }
.zenuml .inline-block { display: inline-block; }
.zenuml .inline { display: inline; }
.zenuml .flex { display: flex; }
.zenuml .inline-flex { display: inline-flex; }
.zenuml .table { display: table; }
.zenuml .grid { display: grid; }
.zenuml .contents { display: contents; }
.zenuml .hidden { display: none; }
.zenuml .h-10 { height: 2.5rem; }
.zenuml .h-5 { height: 1.25rem; }
.zenuml .h-0 { height: 0px; }
.zenuml .h-screen { height: 100vh; }
.zenuml .h-full { height: 100%; }
.zenuml .h-4 { height: 1rem; }
.zenuml .h-6 { height: 1.5rem; }
.zenuml .h-12 { height: 3rem; }
.zenuml .h-8 { height: 2rem; }
.zenuml .h-14 { height: 3.5rem; }
.zenuml .h-3 { height: 0.75rem; }
.zenuml .min-h-screen { min-height: 100vh; }
.zenuml .min-h-\[1em\] { min-height: 1em; }
.zenuml .w-full { width: 100%; }
.zenuml .w-96 { width: 24rem; }
.zenuml .w-28 { width: 7rem; }
.zenuml .w-4 { width: 1rem; }
.zenuml .w-6 { width: 1.5rem; }
.zenuml .w-8 { width: 2rem; }
.zenuml .w-11\/12 { width: 91.6667%; }
.zenuml .w-px { width: 1px; }
.zenuml .w-3 { width: 0.75rem; }
.zenuml .min-w-\[100px\] { min-width: 100px; }
.zenuml .max-w-full { max-width: 100%; }
.zenuml .max-w-7xl { max-width: 80rem; }
.zenuml .flex-shrink-0, .zenuml .shrink-0 { flex-shrink: 0; }
.zenuml .flex-grow, .zenuml .grow { flex-grow: 1; }
.zenuml .origin-top-left { transform-origin: left top; }
.zenuml .-translate-x-1\/2 { --tw-translate-x: -50%; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .-translate-y-full { --tw-translate-y: -100%; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .-translate-y-8 { --tw-translate-y: -2rem; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .-translate-x-full { --tw-translate-x: -100%; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .translate-y-1\/2 { --tw-translate-y: 50%; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .transform { transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }
.zenuml .cursor-pointer { cursor: pointer; }
.zenuml .select-none { user-select: none; }
.zenuml .resize { resize: both; }
.zenuml .grid-cols-6 { grid-template-columns: repeat(6, minmax(0px, 1fr)); }
.zenuml .grid-cols-4 { grid-template-columns: repeat(4, minmax(0px, 1fr)); }
.zenuml .grid-cols-1 { grid-template-columns: repeat(1, minmax(0px, 1fr)); }
.zenuml .flex-row-reverse { flex-direction: row-reverse; }
.zenuml .flex-col { flex-direction: column; }
.zenuml .flex-nowrap { flex-wrap: nowrap; }
.zenuml .items-start { align-items: flex-start; }
.zenuml .items-end { align-items: flex-end; }
.zenuml .items-center { align-items: center; }
.zenuml .justify-center { justify-content: center; }
.zenuml .justify-between { justify-content: space-between; }
.zenuml .justify-around { justify-content: space-around; }
.zenuml .gap-5 { gap: 1.25rem; }
.zenuml .overflow-hidden { overflow: hidden; }
.zenuml .overflow-visible { overflow: visible; }
.zenuml .overflow-y-auto { overflow-y: auto; }
.zenuml .whitespace-normal { white-space: normal; }
.zenuml .whitespace-nowrap { white-space: nowrap; }
.zenuml .rounded { border-radius: 0.25rem; }
.zenuml .rounded-sm { border-radius: 0.125rem; }
.zenuml .rounded-md { border-radius: 0.375rem; }
.zenuml .rounded-lg { border-radius: 0.5rem; }
.zenuml .rounded-t { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; }
.zenuml .rounded-t-md { border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; }
.zenuml .rounded-b-md { border-bottom-right-radius: 0.375rem; border-bottom-left-radius: 0.375rem; }
.zenuml .border-2 { border-width: 2px; }
.zenuml .border { border-width: 1px; }
.zenuml .border-b-2 { border-bottom-width: 2px; }
.zenuml .border-b { border-bottom-width: 1px; }
.zenuml .border-t { border-top-width: 1px; }
.zenuml .border-r { border-right-width: 1px; }
.zenuml .border-solid { border-style: solid; }
.zenuml .border-dashed { border-style: dashed; }
.zenuml .border-red-900 { --tw-border-opacity: 1; border-color: rgb(127 29 29 / var(--tw-border-opacity)); }
.zenuml .border-skin-frame { border-color: var(--color-border-frame, var(--color-border-base, #000)); }
.zenuml .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); }
.zenuml .border-skin-participant { border-color: var(--color-border-participant, var(--color-border-frame, var(--color-border-base, #000))); }
.zenuml .border-skin-fragment { border-color: var(--color-border-fragment, var(--color-border-frame, var(--color-border-base, #000))); }
.zenuml .border-skin-message-arrow { border-color: var(--color-message-arrow, var(--color-border-frame, var(--color-border-base, #000))); }
.zenuml .border-skin-occurrence { border-color: var(--color-border-occurrence, var(--color-border-frame, var(--color-border-base, #000))); }
.zenuml .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); }
.zenuml .bg-skin-canvas { background-color: var(--color-bg-canvas, var(--color-bg-base, #fff)); }
.zenuml .bg-skin-frame { background-color: var(--color-bg-frame, var(--color-bg-canvas, var(--color-bg-base, #fff))); }
.zenuml .bg-skin-title { background-color: var(--color-bg-title, var(--color-bg-frame, var(--color-bg-canvas, var(--color-bg-base, #fff)))); }
.zenuml .bg-skin-base { background-color: var(--color-bg-base); }
.zenuml .bg-green-200 { --tw-bg-opacity: 1; background-color: rgb(187 247 208 / var(--tw-bg-opacity)); }
.zenuml .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); }
.zenuml .bg-gray-500 { --tw-bg-opacity: 1; background-color: rgb(107 114 128 / var(--tw-bg-opacity)); }
.zenuml .bg-skin-lifeline { background-color: var(--color-border-participant, var(--color-border-participant, var(--color-border-frame, var(--color-border-base, #000)))); }
.zenuml .bg-skin-participant { background-color: var(--color-bg-participant, var(--color-bg-frame, var(--color-bg-canvas, var(--color-bg-base, #fff)))); }
.zenuml .bg-gray-400 { --tw-bg-opacity: 1; background-color: rgb(156 163 175 / var(--tw-bg-opacity)); }
.zenuml .bg-skin-divider { background-color: var(--color-border-participant, var(--color-border-frame, var(--color-border-base, #000))); }
.zenuml .bg-skin-fragment-header { background-color: var(--color-bg-fragment-header, transparent); }
.zenuml .bg-skin-occurrence { background-color: var(--color-bg-occurrence, var(--color-bg-participant, var(--color-bg-frame, var(--color-bg-canvas, var(--color-bg-base, #fff))))); }
.zenuml .bg-opacity-75 { --tw-bg-opacity: 0.75; }
.zenuml .fill-current { fill: currentcolor; }
.zenuml .fill-none { fill: none; }
.zenuml .stroke-current { stroke: currentcolor; }
.zenuml .stroke-2 { stroke-width: 2; }
.zenuml .object-contain { object-fit: contain; }
.zenuml .p-1 { padding: 0.25rem; }
.zenuml .p-2 { padding: 0.5rem; }
.zenuml .p-0 { padding: 0px; }
.zenuml .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }
.zenuml .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
.zenuml .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
.zenuml .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
.zenuml .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
.zenuml .px-4 { padding-left: 1rem; padding-right: 1rem; }
.zenuml .py-5 { padding-top: 1.25rem; padding-bottom: 1.25rem; }
.zenuml .px-px { padding-left: 1px; padding-right: 1px; }
.zenuml .pb-8 { padding-bottom: 2rem; }
.zenuml .pt-8 { padding-top: 2rem; }
.zenuml .pt-4 { padding-top: 1rem; }
.zenuml .pb-20 { padding-bottom: 5rem; }
.zenuml .pb-4 { padding-bottom: 1rem; }
.zenuml .pb-32 { padding-bottom: 8rem; }
.zenuml .pb-2 { padding-bottom: 0.5rem; }
.zenuml .pr-24 { padding-right: 6rem; }
.zenuml .pt-24 { padding-top: 6rem; }
.zenuml .pb-10 { padding-bottom: 2.5rem; }
.zenuml .pr-1 { padding-right: 0.25rem; }
.zenuml .text-left { text-align: left; }
.zenuml .text-center { text-align: center; }
.zenuml .align-bottom { vertical-align: bottom; }
.zenuml .text-xs { font-size: 0.75rem; line-height: 1rem; }
.zenuml .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
.zenuml .text-base { font-size: 1rem; line-height: 1.5rem; }
.zenuml .text-xl { font-size: 1.25rem; line-height: 1.75rem; }
.zenuml .text-lg { font-size: 1.125rem; line-height: 1.75rem; }
.zenuml .font-bold { font-weight: 700; }
.zenuml .font-semibold { font-weight: 600; }
.zenuml .font-medium { font-weight: 500; }
.zenuml .font-thin { font-weight: 100; }
.zenuml .italic { font-style: italic; }
.zenuml .leading-6 { line-height: 1.5rem; }
.zenuml .leading-4 { line-height: 1rem; }
.zenuml .text-skin-title { color: var(--color-text-title, var(--color-text-message, var(--color-text-base, #000))); }
.zenuml .text-skin-control { color: var(--color-text-control, var(--color-text-secondary, var(--color-text-base, #000))); }
.zenuml .text-skin-link { color: var(--color-text-link, var(--color-text-secondary, var(--color-text-base, #000))); }
.zenuml .text-green-700 { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity)); }
.zenuml .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }
.zenuml .text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity)); }
.zenuml .text-gray-400 { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity)); }
.zenuml .text-gray-600 { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity)); }
.zenuml .text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); }
.zenuml .text-skin-participant { color: var(--color-text-participant, var(--color-text-message, var(--color-text-base, #000))); }
.zenuml .text-skin-base { color: var(--color-text-base); }
.zenuml .text-skin-message { color: var(--color-text-message, var(--color-text-base, #000)); }
.zenuml .text-skin-comment { color: var(--color-text-comment, var(--color-text-secondary, var(--color-text-base, #000))); }
.zenuml .text-skin-fragment-header { color: var(--color-text-fragment-header, var(--color-text-message, #000)); }
.zenuml .text-skin-fragment { color: var(--color-text-fragment, var(--color-text-message, #000)); }
.zenuml .text-skin-message-arrow { color: var(--color-message-arrow, var(--color-border-frame, var(--color-border-base, #000))); }
.zenuml .opacity-50 { opacity: 0.5; }
.zenuml .shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow); }
.zenuml .shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow); }
.zenuml .shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow); }
.zenuml .shadow-slate-500\/50 { --tw-shadow-color: rgb(100 116 139 / 0.5); --tw-shadow: var(--tw-shadow-colored); }
.zenuml .blur { --tw-blur: blur(8px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }
.zenuml .grayscale { --tw-grayscale: grayscale(100%); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }
.zenuml .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }
.zenuml .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 0.15s; }
.zenuml .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 0.15s; }
.zenuml .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 0.15s; }
.zenuml .hover\:whitespace-normal:hover { white-space: normal; }
.zenuml .hover\:bg-yellow-300:hover { --tw-bg-opacity: 1; background-color: rgb(253 224 71 / var(--tw-bg-opacity)); }
.zenuml .hover\:bg-gray-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity)); }
.zenuml .hover\:bg-skin-message-hover:hover { background-color: var(--color-bg-message-hover, var(--color-text-base, #000)); }
.zenuml .hover\:text-gray-600:hover { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity)); }
.zenuml .hover\:text-gray-500:hover { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); }
.zenuml .hover\:text-skin-message-hover:hover { color: var(--color-text-message-hover, var(--color-bg-base, #fff)); }
.zenuml .hover\:opacity-100:hover { opacity: 1; }
.zenuml .focus\:outline-none:focus { outline: transparent solid 2px; outline-offset: 2px; }
.zenuml .focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000); }
.zenuml .focus\:ring-inset:focus { --tw-ring-inset: inset; }
.zenuml .focus\:ring-indigo-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); }
.zenuml .group:hover .group-hover\:flex { display: flex; }
.zenuml .group:hover .group-hover\:hidden { display: none; }
@media (min-width: 640px) {
  .zenuml .sm\:my-8 { margin-top: 2rem; margin-bottom: 2rem; }
  .zenuml .sm\:block { display: block; }
  .zenuml .sm\:inline-block { display: inline-block; }
  .zenuml .sm\:h-screen { height: 100vh; }
  .zenuml .sm\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0px, 1fr)); }
  .zenuml .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0px, 1fr)); }
  .zenuml .sm\:gap-6 { gap: 1.5rem; }
  .zenuml .sm\:p-2 { padding: 0.5rem; }
  .zenuml .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
  .zenuml .sm\:align-middle { vertical-align: middle; }
}
@media (min-width: 1024px) {
  .zenuml .lg\:mx-auto { margin-left: auto; margin-right: auto; }
  .zenuml .lg\:mx-0 { margin-left: 0px; margin-right: 0px; }
  .zenuml .lg\:max-w-none { max-width: none; }
  .zenuml .lg\:grid-cols-8 { grid-template-columns: repeat(8, minmax(0px, 1fr)); }
  .zenuml .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0px, 1fr)); }
  .zenuml .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; }
}
.zenuml .\[\&\>svg\]\:h-full > svg { height: 100%; }
.zenuml .\[\&\>svg\]\:w-full > svg { width: 100%; }
.zenuml *, .zenuml ::before, .zenuml ::after { box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); }
.zenuml ::before, .zenuml ::after { --tw-content: ""; }
.zenuml html { line-height: 1.5; text-size-adjust: 100%; tab-size: 4; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-feature-settings: normal; }
.zenuml body { margin: 0px; line-height: inherit; }
.zenuml hr { height: 0px; color: inherit; border-top-width: 1px; }
.zenuml abbr:where([title]) { text-decoration: underline dotted; }
.zenuml h1, .zenuml h2, .zenuml h3, .zenuml h4, .zenuml h5, .zenuml h6 { font-size: inherit; font-weight: inherit; }
.zenuml a { color: inherit; text-decoration: inherit; }
.zenuml b, .zenuml strong { font-weight: bolder; }
.zenuml code, .zenuml kbd, .zenuml samp, .zenuml pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 1em; }
.zenuml small { font-size: 80%; }
.zenuml sub, .zenuml sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
.zenuml sub { bottom: -0.25em; }
.zenuml sup { top: -0.5em; }
.zenuml table { text-indent: 0px; border-color: inherit; border-collapse: collapse; }
.zenuml button, .zenuml input, .zenuml optgroup, .zenuml select, .zenuml textarea { font-family: inherit; font-size: 100%; font-weight: inherit; line-height: inherit; color: inherit; margin: 0px; padding: 0px; }
.zenuml button, .zenuml select { text-transform: none; }
.zenuml button, .zenuml [type="button"], .zenuml [type="reset"], .zenuml [type="submit"] { appearance: button; background-color: transparent; background-image: none; }
.zenuml progress { vertical-align: baseline; }
.zenuml ::-webkit-inner-spin-button, .zenuml ::-webkit-outer-spin-button { height: auto; }
.zenuml [type="search"] { appearance: textfield; outline-offset: -2px; }
.zenuml ::-webkit-search-decoration { appearance: none; }
.zenuml ::-webkit-file-upload-button { appearance: button; font: inherit; }
.zenuml summary { display: list-item; }
.zenuml blockquote, .zenuml dl, .zenuml dd, .zenuml h1, .zenuml h2, .zenuml h3, .zenuml h4, .zenuml h5, .zenuml h6, .zenuml hr, .zenuml figure, .zenuml p, .zenuml pre { margin: 0px; }
.zenuml fieldset { margin: 0px; padding: 0px; }
.zenuml legend { padding: 0px; }
.zenuml ol, .zenuml ul, .zenuml menu { list-style: none; margin: 0px; padding: 0px; }
.zenuml textarea { resize: vertical; }
.zenuml input::placeholder, .zenuml textarea::placeholder { opacity: 1; color: rgb(156, 163, 175); }
.zenuml button, .zenuml [role="button"] { cursor: pointer; }
.zenuml :disabled { cursor: default; }
.zenuml img, .zenuml svg, .zenuml video, .zenuml canvas, .zenuml audio, .zenuml iframe, .zenuml embed, .zenuml object { display: block; vertical-align: middle; }
.zenuml img, .zenuml video { max-width: 100%; height: auto; }
.zenuml [hidden] { display: none; }
pre.zenuml { margin: 0px; }
.zenuml { font-family: Helvetica, Verdana, serif; font-size: 16px; }
.zenuml .frame .sequence-diagram .comments code { background-color: rgb(249, 242, 244); padding: 2px; margin: 1px 0px; border-radius: 2px; }
.zenuml .frame .sequence-diagram .comments .rest-api .http-method-post { color: rgb(13, 75, 59); }
.zenuml .frame .sequence-diagram .comments .rest-api .http-method-get { color: rgb(47, 61, 137); }
.zenuml .frame .sequence-diagram .comments .rest-api .http-method-delete { color: rgb(126, 30, 35); }
.zenuml .frame .sequence-diagram .comments ol, .zenuml .frame .sequence-diagram .comments ul { margin: 0px; padding-left: 20px; }
.zenuml .frame .sequence-diagram .comments ul li { list-style-type: none; }
.zenuml .frame .sequence-diagram .comments ul li input[type="checkbox"] { margin-left: -1em; }
.zenuml .frame .sequence-diagram .comments table { border-collapse: collapse; border-spacing: 0px; empty-cells: show; border-color: rgb(203, 203, 203); }
.zenuml .frame .sequence-diagram .comments table td, .zenuml .frame .sequence-diagram .comments table th { padding: 0.5em; }
.zenuml .frame .sequence-diagram .comments table thead { background-color: rgb(224, 224, 224); }
.zenuml .frame .sequence-diagram .comments table td { background-color: transparent; }
.zenuml .theme-blue .sequence-diagram .divider .name { border-radius: 4px; border: 1px solid rgb(226, 133, 83); color: rgb(226, 133, 83); }
.zenuml .theme-blue .sequence-diagram .divider .left, .zenuml .theme-blue .sequence-diagram .divider .right { background: rgb(226, 133, 83); }
.zenuml .theme-blue .sequence-diagram .lifeline .participant { border-color: rgb(3, 44, 114); background: rgba(146, 192, 240, 0.3); }
.zenuml .theme-blue .sequence-diagram .lifeline .participant label { color: rgb(3, 44, 114); }
.zenuml .theme-blue .sequence-diagram .lifeline .line { border-left-color: rgb(3, 44, 114); }
.zenuml .theme-blue .sequence-diagram .message { border-bottom-color: rgb(3, 44, 114); }
.zenuml .theme-blue .sequence-diagram .message .name { color: rgb(3, 44, 114); }
.zenuml .theme-blue .sequence-diagram .message svg polyline { stroke: rgb(3, 44, 114); }
.zenuml .theme-blue .sequence-diagram .message svg polyline.head { fill: rgb(3, 44, 114); }
.zenuml .theme-blue .sequence-diagram .occurrence { border-color: rgb(3, 44, 114); background-color: rgb(255, 255, 255); }
.zenuml .theme-blue .sequence-diagram .fragment { border-radius: 4px; border-color: rgba(4, 46, 110, 0.3); }
.zenuml .theme-blue .sequence-diagram .fragment .header .name { background: rgba(4, 46, 110, 0.1); }
.zenuml .theme-blue .sequence-diagram .fragment .header label { color: rgb(3, 44, 114); }
.zenuml .theme-black-white .sequence-diagram .divider .name { border-radius: 0px; border-color: rgb(0, 0, 0); box-shadow: rgb(0, 0, 0) 2px 2px; }
.zenuml .theme-black-white .sequence-diagram .divider .left, .zenuml .theme-black-white .sequence-diagram .divider .right { background: rgb(0, 0, 0); }
.zenuml .theme-black-white .sequence-diagram .lifeline .participant { border-color: rgb(0, 0, 0); background: rgb(255, 255, 255); box-shadow: rgb(0, 0, 0) 2px 2px; }
.zenuml .theme-black-white .sequence-diagram .lifeline .line { border-left-color: rgba(0, 0, 0, 0.4); }
.zenuml .theme-black-white .sequence-diagram .message { border-bottom-color: rgb(0, 0, 0); }
.zenuml .theme-black-white .sequence-diagram .message .name { color: rgb(0, 0, 0); }
.zenuml .theme-black-white .sequence-diagram .message svg polyline { stroke: rgb(0, 0, 0); }
.zenuml .theme-black-white .sequence-diagram .message svg polyline.head { fill: rgb(0, 0, 0); }
.zenuml .theme-black-white .sequence-diagram .occurrence { border-color: rgb(0, 0, 0); background-color: rgb(245, 245, 245); }
.zenuml .theme-black-white .sequence-diagram .fragment { border-color: rgba(0, 0, 0, 0.3); }
.zenuml .theme-black-white .sequence-diagram .fragment .header .name { background: rgba(0, 0, 0, 0.07); }
.zenuml .theme-star-uml .sequence-diagram .lifeline .participant { border-color: rgb(185, 64, 101); background-color: rgb(255, 254, 200); }
.zenuml .theme-star-uml .sequence-diagram .lifeline .line { border-left-color: rgb(185, 64, 101); }
.zenuml .theme-star-uml .sequence-diagram .message { border-bottom-color: rgb(185, 64, 101); }
.zenuml .theme-star-uml .sequence-diagram .message svg polyline { stroke: rgb(185, 64, 101); }
.zenuml .theme-star-uml .sequence-diagram .message svg polyline.head { fill: rgb(185, 64, 101); }
.zenuml .theme-star-uml .sequence-diagram .occurrence { background-color: rgb(255, 254, 200); border-color: rgb(185, 64, 101); }
.zenuml .blue-river .sequence-diagram { color: rgb(84, 82, 246); }
.zenuml .blue-river .sequence-diagram .life-line-layer .lifeline.actor .participant::before { filter: invert(100%) sepia(0%) saturate(0%) hue-rotate(93deg) brightness(103%) contrast(103%); }
.zenuml .blue-river .sequence-diagram .life-line-layer .participant { background: rgb(32, 151, 247); box-shadow: rgb(131, 196, 248) 4px 4px; border-radius: 9px; color: rgb(255, 255, 255); }
.zenuml .blue-river .sequence-diagram .life-line-layer .participant .interface { font-size: 0.8em; }
.zenuml .blue-river .sequence-diagram .life-line-layer .line { border-left-color: rgb(32, 151, 247); }
.zenuml .blue-river .sequence-diagram .message-layer .message { border-bottom-color: rgb(32, 151, 247); }
.zenuml .blue-river .sequence-diagram .message-layer .message svg.arrow polyline { stroke: rgb(32, 151, 247); fill: rgb(32, 151, 247); }
.zenuml .blue-river .sequence-diagram .message-layer .message.self svg.arrow polyline { fill: none; }
.zenuml .blue-river .sequence-diagram .message-layer .message.self svg.arrow polyline.head { fill: rgb(32, 151, 247); }
.zenuml .blue-river .sequence-diagram .message-layer .occurrence { background: rgb(229, 253, 232); border-color: rgb(101, 191, 115); box-shadow: rgb(147, 198, 155) 4px 4px; }
.zenuml .blue-river .sequence-diagram .message-layer .fragment { border-color: rgb(32, 151, 247); }
.zenuml .blue-river .sequence-diagram .message-layer .fragment .header .name label { display: inline-block; min-width: 50px; background: rgb(84, 82, 246); color: rgb(255, 255, 255); padding: 2px 0px 2px 10px; }
.zenuml .blue-river .sequence-diagram .message-layer .fragment .header .name::after { content: "SO"; display: inline-block; background: rgb(84, 82, 246); margin-left: -23px; width: 34px; transform: translateY(-2px); height: 22px; clip-path: polygon(66% 0px, 100% 0px, 100% 66%, 66% 100%); }
.zenuml .blue-river .sequence-diagram .message-layer .fragment .header > label { display: inline-block; min-width: 50px; font-weight: 700; color: rgb(255, 255, 255); background: rgb(101, 191, 115); }
.zenuml .blue-river .sequence-diagram .message-layer .fragment .comments { border-color: inherit; }
.zenuml .blue-river .sequence-diagram .message-layer .fragment .divider { border-bottom-color: inherit; }
:root { --background: #282a36; --hover: #2b2b2b; --occurance-border: #6e7191; --border: #585b74; --white: #f8f8f2; --current: #44475a; --comment: #6272a4; --cyan: #8be9fd; --green: #50fa7b; --orange: #ffb86c; --pink: #ff79c6; --purple: #bd93f9; --red: #ff5555; --yellow: #f1fa8c; --crayola: #a9b7c6; }
body .zenuml.theme-dark { background-color: var(--background); }
.zenuml.theme-dark .header { color: var(--crayola); font-weight: 700; }
.zenuml.theme-dark .sequence-diagram .lifeline-group:hover { background-color: rgb(34, 48, 73); }
.zenuml.theme-dark .sequence-diagram .lifeline .participant { border-color: var(--border); border-radius: 2px; background: var(--background); }
.zenuml.theme-dark .sequence-diagram .lifeline .participant label { color: var(--cyan); }
.zenuml.theme-dark .sequence-diagram .lifeline .line { background: var(--border); }
.zenuml.theme-dark .fragment > .header > .condition { color: var(--crayola); padding: 6px; }
.zenuml.theme-dark .sequence-diagram .fragment .header label { color: var(--crayola); padding: 6px; }
.zenuml.theme-dark .sequence-diagram .fragment .header .name { border-bottom-color: var(--border); }
.zenuml.theme-dark .sequence-diagram .fragment .header .name label { color: var(--pink); font-weight: 400; }
.zenuml.theme-dark .sequence-diagram .fragment { border-color: var(--border); }
.zenuml.theme-dark .sequence-diagram .comments { border: none; background: transparent; color: var(--comment); }
.zenuml.theme-dark .sequence-diagram .fragment .segment:not(:first-child) { border-top-color: var(--border); }
.zenuml.theme-dark .sequence-diagram .interaction { color: var(--orange); }
.zenuml.theme-dark .sequence-diagram .message { border-bottom-color: var(--border); }
.zenuml.theme-dark .sequence-diagram .message .name:hover { color: var(--crayola); }
.zenuml.theme-dark .sequence-diagram .message svg polyline { fill: var(--border); stroke: var(--border); }
.zenuml.theme-dark .sequence-diagram .message.self svg > polyline:not(.head) { fill: none; }
.zenuml.theme-dark .sequence-diagram .occurrence { background-color: var(--current); box-shadow: 0 0 0 1px var(--occurance-border); border-radius: 2px; }
.zenuml.theme-dark .sequence-diagram .divider .left, .zenuml.theme-dark .sequence-diagram .divider .right { background: var(--border); }
.zenuml.theme-dark .sequence-diagram .divider .name { color: var(--comment); }
.zenuml.theme-dark .interaction .message > .name:hover { background-color: rgb(34, 139, 34); color: rgb(255, 255, 255); }
p[data-v-15224042] { margin: 0px; line-height: 1.25em; }
.occurrence[data-v-4e715276] { width: 15px; padding: 16px 0px 16px 5px; }
[data-v-4e715276] > .statement-container:last-child > .interaction.return:last-of-type { margin-bottom: 0px; border-bottom: 0px; transform: translateY(1px); }
[data-v-4e715276] > .statement-container:last-child > .interaction.return:last-of-type > .message { bottom: -17px; height: 0px; }
.right-to-left.occurrence[data-v-4e715276] { left: -14px; }
.occurrence { margin-top: -2px; }
.interaction .occurrence.source[data-v-703306ae] { position: absolute; height: calc(100% + 14px); left: -12px; display: none; }
.interaction .occurrence.source.right-to-left[data-v-703306ae] { left: unset; right: -13px; }
.message.self[data-v-fbc5fa7e] { transform: translate(-5px); }
.interaction .invisible-occurrence[data-v-40bff5d3] { height: 20px; }
.interaction.async[data-v-40bff5d3] .message { width: 100%; }
.collapsible-header[data-v-b41acdfc] { display: flex; width: 100%; justify-content: space-between; }
.collapse-button[data-v-b41acdfc] { display: none; }
.fragment:hover .collapsible-header .collapse-button.expanded[data-v-b41acdfc] { display: inline-block !important; }
[data-v-0a896a9f], [data-v-0f640fba] { border-color: inherit; }
.fragment.par > .block > .statement-container:not(:first-child) { border-top-color: inherit; border-top-width: 1px; border-top-style: solid; }
[data-v-ce259a11], [data-v-a846d536], [data-v-7b7c43b8] { border-color: inherit; }
.divider[data-v-9e567e69] { display: flex; align-items: center; }
.name[data-v-9e567e69] { margin: 0px; padding: 2px 6px; }
.left[data-v-9e567e69], .right[data-v-9e567e69] { height: 1px; flex-grow: 1; }


:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
h1, h2, h3, h4, h5 { white-space: pre-wrap; }
body { margin: 0px; padding: 0px; height: auto; inset: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
thead, tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-fences-adv-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
svg { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; border-color: transparent !important; padding-top: 0px !important; padding-bottom: 0px !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
  #write > p:nth-child(1) { margin-top: 0px; }
  .typora-export-show-outline .typora-export-sidebar { display: none; }
  figure { overflow-x: visible; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.reversefootnote { font-family: ui-monospace, sans-serif; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.6; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
.md-expand mark .md-meta { opacity: 0.3 !important; }
mark .md-meta { color: rgb(0, 0, 0); }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-fences.md-fences-math { font-size: 1em; }
.md-fences-advanced:not(.md-focus) { padding: 0px; white-space: nowrap; border: 0px; }
.md-fences-advanced:not(.md-focus) { background: inherit; }
.typora-export-show-outline .typora-export-content { max-width: 1440px; margin: auto; display: flex; flex-direction: row; }
.typora-export-sidebar { width: 300px; font-size: 0.8rem; margin-top: 80px; margin-right: 18px; }
.typora-export-show-outline #write { --webkit-flex:2; flex: 2 1 0%; }
.typora-export-sidebar .outline-content { position: fixed; top: 0px; max-height: 100%; overflow: hidden auto; padding-bottom: 30px; padding-top: 60px; width: 300px; }
@media screen and (max-width: 1024px) {
  .typora-export-sidebar, .typora-export-sidebar .outline-content { width: 240px; }
}
@media screen and (max-width: 800px) {
  .typora-export-sidebar { display: none; }
}
.outline-content li, .outline-content ul { margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; list-style: none; overflow-wrap: anywhere; }
.outline-content ul { margin-top: 0px; margin-bottom: 0px; }
.outline-content strong { font-weight: 400; }
.outline-expander { width: 1rem; height: 1.42857rem; position: relative; display: table-cell; vertical-align: middle; cursor: pointer; padding-left: 4px; }
.outline-expander::before { content: ""; position: relative; font-family: Ionicons; display: inline-block; font-size: 8px; vertical-align: middle; }
.outline-item { padding-top: 3px; padding-bottom: 3px; cursor: pointer; }
.outline-expander:hover::before { content: ""; }
.outline-h1 > .outline-item { padding-left: 0px; }
.outline-h2 > .outline-item { padding-left: 1em; }
.outline-h3 > .outline-item { padding-left: 2em; }
.outline-h4 > .outline-item { padding-left: 3em; }
.outline-h5 > .outline-item { padding-left: 4em; }
.outline-h6 > .outline-item { padding-left: 5em; }
.outline-label { cursor: pointer; display: table-cell; vertical-align: middle; text-decoration: none; color: inherit; }
.outline-label:hover { text-decoration: underline; }
.outline-item:hover { border-color: rgb(245, 245, 245); background-color: var(--item-hover-bg-color); }
.outline-item:hover { margin-left: -28px; margin-right: -28px; border-left: 28px solid transparent; border-right: 28px solid transparent; }
.outline-item-single .outline-expander::before, .outline-item-single .outline-expander:hover::before { display: none; }
.outline-item-open > .outline-item > .outline-expander::before { content: ""; }
.outline-children { display: none; }
.info-panel-tab-wrapper { display: none; }
.outline-item-open > .outline-children { display: block; }
.typora-export .outline-item { padding-top: 1px; padding-bottom: 1px; }
.typora-export .outline-item:hover { margin-right: -8px; border-right: 8px solid transparent; }
.typora-export .outline-expander::before { content: "+"; font-family: inherit; top: -1px; }
.typora-export .outline-expander:hover::before, .typora-export .outline-item-open > .outline-item > .outline-expander::before { content: "−"; }
.typora-export-collapse-outline .outline-children { display: none; }
.typora-export-collapse-outline .outline-item-open > .outline-children, .typora-export-no-collapse-outline .outline-children { display: block; }
.typora-export-no-collapse-outline .outline-expander::before { content: "" !important; }
.typora-export-show-outline .outline-item-active > .outline-item .outline-label { font-weight: 700; }
.md-inline-math-container mjx-container { zoom: 0.95; }
mjx-container { break-inside: avoid; }


.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; outline: 0px; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: auto hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 10px; z-index: 3; overflow-y: hidden; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; inset: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
span.cm-underlined { text-decoration: underline; }
span.cm-strikethrough { text-decoration: line-through; }
.cm-tw-syntaxerror { color: rgb(255, 255, 255); background-color: rgb(153, 0, 0); }
.cm-tw-deleted { text-decoration: line-through; }
.cm-tw-header5 { font-weight: 700; }
.cm-tw-listitem:first-child { padding-left: 10px; }
.cm-tw-box { border-style: solid; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-color: inherit; border-top-width: 0px !important; }
.cm-tw-underline { text-decoration: underline; }
@media print {
  .CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}


/*快速自定义配置*/
:root {
    --monospace: "JetBrains Mono", "Fira Code", "Cascadia Code", Menlo, "Ubuntu Mono", Consolas, HYZhengYuan; /*代码字体*/
    --text-font: var(--monospace); /*正文字体*/
    --title-font: var(--monospace); /*标题字体*/
    --latex-font: var(--monospace); /*LaTeX字体(不含英语)*/
    --text-line-height: 1.6; /*正文行间距*/
    --code-line-height: 1.6; /*代码块行间距*/
    --p-spacing: 0.8rem; /*段间距*/
    --text-size: 12px;
}/*
 * Copyright (C) 2018 Drake, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * GitHub https://github.com/liangjingkanji/DrakeTyporaTheme
 */
@import url();
@include-when-export url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');

:root {
    --text-color: #acb7c4;
    --bg-color: #282838;
    --control-text-color: var(--text-color);
    --meta-content-color: var(--text-color);
    --active-file-border-color: var(--drake-accent);
    --rawblock-edit-panel-bd: var(--code-block-bg-color);
    --item-hover-bg-color: #1d1d26;
    --active-file-bg-color: var(--item-hover-bg-color);
    --mermaid-theme: night;

    --blur-text-color: rgba(172, 183, 196, 0.5);
    --md-char-color: #535455;
    --side-bar-bg-color: var(--bg-color);
    --search-select-bg-color: #ffffff;
    --search-select-text-color: var(--bg-color);
    --select-text-bg-color: #3473B068;
    --window-border: 1px solid #282828;

    --drake-accent: #904ac2;
    --drake-highlight: #b160ea;
    --a-color: var(--drake-highlight);
    --variable-color: var(--drake-highlight);
    --outline-active-color: var(--a-color);
    --code-block-bg-color: var(--item-hover-bg-color);
    --code-block-color: #A9B7C6;
    --title-color: #bbc6d2;
    --blockquote-border-color: var(--drake-accent);
    --blockquote-color: var(--text-color);
    --blockquote-bg-color: rgba(25, 25, 49, 0.53);
    --strong-color: var(--title-color);
    --h2-underline-color: var(--title-color);
    --horizontal-divider-color: var(--title-color);
    --height-light-color: var(--drake-highlight);
    --height-light-border-color: var(--drake-highlight);
    --yaml-color: #676773;
    --yaml-bg-color: var(--code-block-bg-color);
    --footnotes-bg-color: var(--item-hover-bg-color);
    --footnotes-highlight: #FFD760;
    --table-border-color: var(--item-hover-bg-color);
    --table-header-bg-color: #2c2c47;
    --table-bg-color: var(--bg-color);
    --table-n2-bg-color: var(--table-header-bg-color);
    --input-bg-color: var(--item-hover-bg-color);
    --btn-hover-bg-color: var(--item-hover-bg-color);
    --checkbox-checked: url("data:image/svg+xml,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cpath d='M425.984 726.016l384-384-59.99-61.995-324.01 324.011-152.021-152.021L213.973 512zm384-598.016q36.01 0 61.013 25.984T896 213.974v596.01q0 34.005-25.003 59.99t-61.013 25.983h-596.01q-36.011 0-61.014-25.984t-25.003-59.989v-596.01q0-34.006 25.003-59.99T213.973 128h596.011z' fill='%2365b73b'/%3E%3C/svg%3E");
    --checkbox-unchecked: url("data:image/svg+xml,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cpath d='M810.667 213.333v597.334H213.333V213.333h597.334m0-85.333H213.333C166.4 128 128 166.4 128 213.333v597.334C128 857.6 166.4 896 213.333 896h597.334C857.6 896 896 857.6 896 810.667V213.333C896 166.4 857.6 128 810.667 128z' fill='%23acb7c4'/%3E%3C/svg%3E");
}

html {
    font-size: var(--text-size);
}

body {
    font-family: var(--text-font) !important;
    color: var(--text-color);
    -webkit-font-feature-settings: "liga" on, "calt" on;
    -webkit-font-smoothing: subpixel-antialiased;
    text-rendering: optimizeLegibility;
    letter-spacing: 0;
    margin: 0;
    overflow-x: hidden;
}

p {
    line-height: var(--text-line-height);
}

/*code block*/
.md-fences {
    font-size: 1rem;
    padding: 0.5rem !important;
    border-radius: 2px;
    word-wrap: normal;
    background-color: var(--code-block-bg-color);
    color: var(--code-block-color);
    border: none;
    line-height: var(--code-line-height);
}

/*inline latex*/
.MathJax {
    font-size: 120% !important;
}
.MathJax text, .MathJax use {
    font-family: var(--latex-font);
}
/*math-block latex*/
.md-math-block .MathJax {
    font-size: 130% !important;
}

/*mermaid*/
[id^=mermaidChart] .cluster rect {
    fill: var(--table-n2-bg-color) !important;
    stroke: var(--table-border-color) !important;
}
[id^=mermaidChart] .clusters span.nodeLabel {
    color: var(--text-color) !important;
    line-height: 1.8rem;
}
[mermaid-type="journey"] line {
    stroke: #7a7a7a !important;
}
[mermaid-type="journey"] .label {
    color: #333 !important;
}
[id^=mermaidChart] .relationshipLabelBox {
    fill: var(--bg-color) !important;
    opacity: 1 !important;
    background-color: var(--bg-color) !important;
}
[id^=mermaidChart] .legend {
    fill: var(--text-color) !important;
}
[id^=mermaidChart] g.label {
    font-size: 1rem !important;
}
[id^=mermaidChart] line.divider {
    stroke: var(--table-border-color) !important;
}
[id^=mermaidChart] span.nodeLabel {
    color: var(--code-block-color) !important;
    line-height: 1.8rem;
}
tspan {
    color: var(--text-color)
}
[id^=mermaidChart] .entityLabel {
    fill: var(--code-block-color) !important;
}
[id^=mermaidChart] {
    fill: var(--text-color) !important;
}
[id^=mermaidChart] rect.rect {
    fill: rgba(175, 255, 212, 0.3) !important;
}
.md-diagram-panel-preview text.actor > tspan { /*方块文字*/
    fill: var(--code-block-color) !important;
    stroke: none !important;
    font-family: var(--text-font) !important;
    font-size: 1rem !important;
}
.md-diagram-panel-preview .actor, .md-diagram-panel-preview .entityBox { /*方块*/
    stroke: var(--table-border-color) !important;
    fill: var(--code-block-bg-color) !important;
}
.md-diagram-panel-preview .actor-line { /*竖线*/
    stroke: var(--text-color) !important;
    stroke-width: 1px;
}
.md-diagram-panel-preview .messageLine0 { /*横线*/
    stroke-width: 1.5;
    stroke-dasharray: none;
    stroke: var(--text-color) !important;
}
.md-diagram-panel-preview .messageLine1 { /*虚线*/
    stroke-width: 1.5 !important;
    stroke-dasharray: 2, 2 !important;
    stroke: var(--text-color) !important;
}
.md-diagram-panel-preview .messageText { /*描述文字*/
    fill: var(--text-color) !important;
    font-family: var(--text-font) !important;
    font-size: 1rem !important;
}
.md-diagram-panel-preview .activation0 { /*长方形*/
    fill: #e6e6e6 !important;
    stroke: var(--text-color) !important;
}
.md-diagram-panel-preview .labelText, .md-diagram-panel-preview .labelText > tspan { /*循环标记*/
    fill: var(--code-block-color) !important;
    font-family: var(--text-font) !important;
    font-size: 1rem !important;
    dominant-baseline: unset;
    alignment-baseline: unset;
}
.md-diagram-panel-preview .labelBox { /*循环标记背景*/
    stroke: var(--table-border-color) !important;
    fill: var(--code-block-bg-color) !important;
}
.md-diagram-panel-preview .loopLine { /*循环标记虚线*/
    stroke: var(--text-color) !important;
}
.md-diagram-panel-preview .loopText, .md-diagram-panel-preview .loopText > tspan { /*循环名称*/
    fill: var(--text-color) !important;
    font-size: 1rem !important;
}
.md-diagram-panel-preview .sequenceNumber { /*序号*/
    fill: var(--bg-color) !important;
}
pre.md-fences-advanced.md-focus .md-fences-adv-panel {
    border: none;
}
.md-diagram-panel-preview .edgePath .path { /*箭头*/
    stroke: var(--text-color) !important;
}
.md-diagram-panel-preview .edgeLabel rect { /*条件文字背景*/
    fill: var(--bg-color) !important;
}
.md-diagram-panel-preview .edgeLabel span { /*条件文字*/
    color: var(--text-color) !important;
    background: var(--bg-color) !important;
}
.md-diagram-panel-preview .node rect,
.md-diagram-panel-preview .node circle,
.md-diagram-panel-preview .node ellipse,
.md-diagram-panel-preview .node polygon,
.md-diagram-panel-preview .node path { /*形状*/
    stroke: var(--table-border-color) !important;
    fill: var(--code-block-bg-color) !important;
}
#write .md-diagram-panel .md-diagram-panel-preview div { /*形状内文字*/
    color: var(--code-block-color);
    font-family: var(--text-font) !important;
    font-size: 1rem !important;
}

/*code snippet*/
#write code, tt {
    margin: 0 2px;
    color: var(--drake-highlight);
}

/*variable*/
var {
    color: var(--variable-color);
    font-weight: bold;
}

/*raw block*/
.md-rawblock-control:not(.md-rawblock-tooltip) {
    border-radius: 2px 0 2px 2px;
    padding: 0.2rem !important;
}
.md-rawblock:hover > .md-rawblock-container {
    background: none;
}
.md-rawblock-input {
    font-size: 1rem;
}
.md-rawblock-tooltip-btn:hover {
    background: none;
}
.md-rawblock:hover > .md-rawblock-tooltip {
    border-radius: 2px 2px 0 0;
    margin-bottom: 2px !important;
}
.md-rawblock-tooltip.md-rawblock-control {
    border-radius: 2px 2px 0 0;
    color: var(--code-block-color);
}
.md-rawblock-tooltip-name {
    color: var(--code-block-color);
    opacity: 1;
}

/*quote block*/
blockquote:before {
    display: block;
    position: absolute;
    content: '';
    width: 4px;
    left: 0;
    top: 0;
    height: 100%;
    background-color: var(--blockquote-border-color);
    border-radius: 2px;
}

blockquote {
    color: var(--blockquote-color);
    border-radius: 2px;
    padding: 10px 16px;
    background-color: var(--blockquote-bg-color);
    position: relative;
    border-left: none;
}

#write strong {
    color: var(--strong-color);
    font-weight: bold;
}
#write blockquote strong {
    color: var(--blockquote-color);
}

/*link*/
#write a {
    color: var(--a-color);
    text-decoration: none;
}
#write h2 a .md-plain {
    border-bottom: .2rem solid var(--a-color);
}
.on-focus-mode #write a .md-plain, .on-focus-mode .md-htmlblock-container a:hover {
    border-bottom: .1rem solid var(--blur-text-color);
}
#write a .md-plain, .md-htmlblock-container a:hover,
.on-focus-mode #write .md-focus a .md-plain, .md-focus .md-htmlblock-container a:hover {
    border-bottom: .1rem solid var(--a-color);
}
[md-inline=link] a {
    margin: 0 .2rem;
}
a:any-link {
    color: var(--a-color);
}

img {
    border-left: none;
    border-right: none;
    vertical-align: baseline;
    border-radius: 2px;
}

#write {
    max-width: 1200px;
    margin: 0 auto;
    padding: 20px 30px 100px;
}
#typora-source .CodeMirror-lines {
    max-width: 1200px;
}

#write > ul:first-child,
#write > ol:first-child {
    margin-top: 30px;
}

body > *:first-child {
    margin-top: 0 !important;
}

body > *:last-child {
    margin-bottom: 0 !important;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    font-family: var(--title-font);
    position: relative;
    margin-top: 2rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
    color: var(--title-color);
}

h3.md-focus:before, h4.md-focus:before, h5.md-focus:before, h6.md-focus:before {
    visibility: hidden;
}

h1 {
    font-size: 2rem;
    text-align: center;
    margin-top: 0;
}

h2 {
    font-size: 1.8rem;
    margin-bottom: 1.5rem;
}

.on-focus-mode h2.md-end-block.md-heading:not(.md-focus):not(.md-focus-container):after {
    background-color: var(--blur-text-color) !important;
}

h3 {
    font-size: 1.4rem;
}

h4 {
    font-size: 1.2rem;
}

h5 {
    font-size: 1rem;
}

h6 {
    font-size: 1rem;
}

h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}

h1 tt,
h1 code {
    font-size: inherit !important;
}

h2 tt,
h2 code {
    font-size: inherit !important;
}

h3 tt,
h3 code {
    font-size: inherit !important;
}

h4 tt,
h4 code {
    font-size: inherit !important;
}

h5 tt,
h5 code {
    font-size: inherit !important;
}

h6 tt,
h6 code {
    font-size: inherit !important;
}

p, blockquote, ul, ol, dl, table {
    margin: var(--p-spacing) 0;
}

li > ol,
li > ul {
    margin: 0 0;
}
li {
    margin: 0.5em 0;
}

hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: var(--horizontal-divider-color);
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

body > h2:first-child {
    margin-top: 0;
    padding-top: 0;
}

body > h1:first-child {
    margin-top: 0;
    padding-top: 0;
}

body > h1:first-child + h2 {
    margin-top: 0;
    padding-top: 0;
}

body > h3:first-child,
body > h4:first-child,
body > h5:first-child,
body > h6:first-child {
    margin-top: 0;
    padding-top: 0;
}

a:first-child h1,
a:first-child h2,
a:first-child h3,
a:first-child h4,
a:first-child h5,
a:first-child h6 {
    margin-top: 0;
    padding-top: 0;
}

h1 p,
h2 p,
h3 p,
h4 p,
h5 p,
h6 p {
    margin-top: 0;
}

li p.first {
    display: inline-block;
}

ul, ol {
    padding-inline-start: 2em;
}

ul:first-child,
ol:first-child {
    margin-top: 0;
}

ul:last-child,
ol:last-child {
    margin-bottom: 0;
}

.ty-table-edit {
    margin-top: -1rem !important;
}
#write table {
    margin-top: 1rem;
    word-break: initial;
    background-color: var(--table-bg-color);
}
table tr {
    border-top: .1em solid var(--table-border-color);
    margin: 0;
    padding: 0;
}
table th {
    font-weight: bold;
    border: .1em solid var(--table-border-color);
    border-bottom: 0;
    margin: 0;
    padding: 6px 13px;
}
table td {
    border: .1em solid var(--table-border-color);
    margin: 0;
    padding: 6px 13px;
}
table thead {
    background-color: var(--table-header-bg-color);
}
table tr:nth-child(2n) {
    background-color: var(--table-n2-bg-color);
}
table tr th:first-child,
table tr td:first-child {
    margin-top: 0;
}
table tr th:last-child,
table tr td:last-child {
    margin-bottom: 0;
}

#write em {
    padding: 0 5px 0 2px;
}

#write table thead th {
    background-color: var(--table-header-bg-color);
}

/* height light */
#write mark {
    border: .1em solid var(--height-light-border-color);
    color: var(--height-light-color);
    background-color: transparent;
    padding: .1rem .5rem;
    border-radius: 2rem;
    margin: 0 .2rem;
    font-size: .95rem;
}

/*shortcut*/
kbd {
    border: .1em solid #5b5b5e;
    background: transparent;
    color: var(--text-color);
    margin: 0 .4rem;
    font-family: var(--text-font) !important;
    font-size: .95rem;
    padding: .3em .4em;
    border-radius: .4em;
    box-shadow: .1em .1em .2em rgba(0, 0, 0, 0.3);
}

#write del {
    padding: 1px 2px;
}

.md-task-list-item > input {
    margin-left: -1.3em;
}

@media print {
    html {
        font-size: 12px;
    }

    table,
    pre {
        page-break-inside: avoid;
    }

    pre {
        word-wrap: break-word;
    }
}

/*YAML*/
#write pre.md-meta-block {
    padding: 1rem;
    font-size: 1rem;
    line-height: 1.45;
    background-color: var(--yaml-bg-color);
    border: 0;
    border-radius: 2px;
    color: var(--yaml-color);
    margin-top: 0 !important;
}

.mathjax-block > .code-tooltip {
    bottom: .375rem;
}

#write > h3.md-focus:before {
    left: -1.5625rem;
    top: .375rem;
}

#write > h4.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

#write > h5.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

#write > h6.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

.md-image > .md-meta {
    border-radius: 2px;
    font-family: initial;
    padding: 2px 0 0 4px;
    color: inherit;
}

.md-tag {
    color: inherit;
}

.md-toc {
    margin-top: 20px;
    padding-bottom: 20px;
}

.typora-quick-open-item {
    font-size: 1rem !important;
    height: 50px;
    padding-left: 8px;
    padding-top: 4px;
    padding-bottom: 4px;
}

#typora-quick-open {
    box-shadow: 0 0 8px #00000045;
    padding: 0;
}

.ty-quick-open-category.ty-has-prev .ty-quick-open-category-title {
    border-top: none;
}

#typora-quick-open-input {
    margin: 8px;
    box-shadow: none;
    border-radius: 2px;
}

#typora-quick-open-input input {
    font-size: 1rem;
    box-shadow: none;
    padding-top: 2px;
    padding-left: 10px;
    padding-right: 10px;
    line-height: 32px;
    max-height: 32px;
    border: none;
}

.modal-dialog#typora-quick-open {
    border-radius: 8px;
}

.ty-quick-open-category-title {
    padding-left: 8px;
    color: #BEBEBE;
    font-size: 0.8rem;
    margin-bottom: 4px;
}

.typora-quick-open-item-path {
    font-size: 0.8rem;
    text-overflow: ellipsis;
    white-space: nowrap;
    margin-top: 1px;
}

/*search input*/
.form-control {
    border: none;
    border-radius: 2px;
    box-shadow: none;
}

#md-searchpanel .btn {
    border-radius: 2px;
}

#search-panel-replaceall-btn {
    padding-right: 5px !important;
    text-align: center !important;
}

#search-panel-replace-btn {
    text-align: center !important;
}

#md-searchpanel input {
    background: var(--input-bg-color);
    border-radius: 2px;
}

.searchpanel-search-option-btn {
    border-radius: 2px;
    border: none;
    background: transparent;
    color: var(--text-color);
}

.searchpanel-search-option-btn.active {
    background: var(--text-color);
    color: var(--bg-color);
}

.form-control:focus {
    box-shadow: none;
}

#md-notification:before {
    top: 10px;
}

/** focus mode */
.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header,
.context-menu,
.megamenu-content,
footer {
    font-family: initial;
}

/*sidebar*/
.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state {
    visibility: visible;
}
.file-node-content {
    display: flex;
    align-items: center;
}
.file-node-open-state {
    margin-right: .5rem;
}
.file-node-icon {
    margin-right: .5rem;
}

#typora-sidebar {
    font-size: inherit;
    font-family: var(--title-font);
}

.sidebar-tabs {
    border-bottom: none;
}

.file-list-item-summary, .file-list-item-parent-loc, .file-list-item-time, .file-list-item-summary {
    font-size: 0.9rem !important;
    font-family: var(--text-font);
}

.file-list-item-file-ext-part {
    display: none;
}

.outline-item {
    font-size: 1rem;
}

/*footnotes mark*/
#write .md-footnote {
    background-color: inherit;
    color: var(--drake-highlight);
    font-size: 0.9rem;
    border-radius: 0.9rem;
    padding-left: 0;
}

#write .md-footnote:before {
    content: "[";
}

#write .md-footnote:after {
    content: "]";
}

/*footnotes content*/
.md-hover-tip .code-tooltip-content {
    border-radius: 2px;
}

/*footnotes title*/
span.md-def-name {
    padding-right: 3ch;
    padding-left: 0;
    position: relative;
    font-weight: normal;
}

/*footnotes desc*/
.footnotes {
    font-size: 1rem;
    font-weight: normal;
    color: var(--text-color);
    position: relative;
}

/*footnotes tooltip text*/
.code-tooltip-content .md-plain {
    font-size: 0.9rem;
    font-family: inherit;
}

.code-tooltip-content code {
    padding: 0 2px;
    font-family: inherit;
    color: var(--footnotes-highlight);
    background-color: inherit;
}

.code-tooltip-content a {
    color: var(--footnotes-highlight);
}

div.code-tooltip-content {
    box-shadow: 0 0 8px #00000045;
    background: var(--footnotes-bg-color);
}

.footnotes {
    opacity: 1;
}

.md-def-name:after {
    content: ". ^";
    color: var(--text-color);
}

.md-def-footnote .md-def-name:before {
    content: "";
    color: var(--text-color);
    position: absolute;
}

.md-def-name:before {
    content: "";
    color: var(--text-color);
    position: absolute;
}

.md-content.md-url, .md-def-content.md-def-url.md-auto-disp {
    text-decoration: none;
    border-bottom: .1rem solid var(--text-color);
}

.CodeMirror-scroll::-webkit-scrollbar {
    display: none;
}

.file-list-item-summary {
    font-size: 1em;
}

.pin-outline #outline-content .outline-active strong, .pin-outline .outline-active {
    font-weight: 500;
    color: var(--outline-active-color);
}

.file-list-item.active {
    border-left: 4px solid var(--drake-accent);
}

#md-searchpanel .btn:not(.close-btn):hover {
    box-shadow: none;
    background: var(--btn-hover-bg-color);
}

/*checkbox*/
#write input[type=checkbox] {
    opacity: 0;
    height: 1.6rem;
    width: 1.6rem;
    margin-left: -2em;
    margin-top: 0;
    top: 0;
}

#write .ul-list li.md-task-list-item.task-list-done::before {
    content: "";
    background: var(--checkbox-checked) 0 0 no-repeat;
    background-size: 100%;
    display: inline-block;
    position: absolute;
    height: 1.6rem;
    width: 1.6rem;
    margin-left: -2em;
}
#write .ul-list li.md-task-list-item.task-list-not-done::before {
    content: "";
    background: var(--checkbox-unchecked) 0 0 no-repeat;
    background-size: 100%;
    display: inline-block;
    position: absolute;
    height: 1.6rem;
    width: 1.6rem;
    margin-left: -2em;
}
.task-list-item p {
    line-height: 1.6rem;
}

/*insert table*/
.btn {
    border-radius: 2px;
}

.modal-content {
    border-radius: 8px;
}

.btn-primary:hover, .btn-primary:active {
    background-color: var(--btn-hover-bg-color);
    color: var(--drake-highlight);
}

.btn-primary {
    background-color: transparent;
    color: var(--drake-highlight);
}

.btn-default {
    background-color: transparent;
}

.btn:active {
    box-shadow: none;
    border-color: transparent;
}

.modal-footer {
    border-top: none;
}

#table-insert-col, #table-insert-row {
    background: var(--input-bg-color);
    border-radius: 2px;
}

/*preference panel*/
#megamenu-content {
    background-image: none !important;
    background-color: var(--bg-color);
}
#top-titlebar {
    height: inherit;
    background-color: var(--bg-color);
}
#megamenu-menu-sidebar {
    background-color: var(--bg-color);
    color: var(--text-color);
}
.long-btn {
    width: inherit;
    min-width: 300px;
    border: 1px solid var(--text-color);
    border-radius: 6px;
}
.megamenu-menu-panel h1 {
    margin-bottom: 3rem;
    text-align: left;
}
.megamenu-menu-panel h1, .megamenu-menu-panel h2 {
    font-weight: normal;
}
#recent-file-panel-search-input {
    height: 45px;
    border: none;
    border-bottom: 1px solid var(--text-color);
    padding-left: 8px;
}
#recent-file-panel-search-input::placeholder {
    color: var(--text-color);
    opacity: .5;
}
.megamenu-menu-header {
    border-bottom: none;
}
#recent-file-panel-action-btn {
    background: none;
    border: none;
}
#recent-file-panel-action-btn-container {
    float: none;
    display: inline-block;
}
#top-titlebar .toolbar-icon.btn.hover, #top-titlebar .toolbar-icon.btn:hover {
    background-color: var(--btn-hover-bg-color);
    color: var(--text-color);
}
.megamenu-menu-panel .btn:hover {
    background-color: var(--btn-hover-bg-color) !important;
    color: var(--text-color);
}
#recent-file-panel tbody tr:nth-child(2n-1),
.megamenu-menu-panel table thead,
.megamenu-menu-panel table tr {
    background-color: transparent;
}
.megamenu-menu-panel table {
    font-weight: normal;
}
#megamenu-back-btn {
    color: var(--text-color);
    border: 1px solid var(--text-color);
}
.megamenu-menu-header #megamenu-menu-header-title {
    color: var(--text-color);
}
header, .context-menu, .megamenu-content, footer {
    font-family: var(--text-font);
}
.ty-preferences select {
    padding-left: 2px;
}
.preference-item-hint {
    font-size: 14px;
}
a.ty-link {
    color: var(--a-color);
    margin: 0 .2rem;
}

/**
    code render
    Name: IntelliJ IDEA darcula theme
    From IntelliJ IDEA by JetBrains
 */
.cm-s-inner.CodeMirror {
    background: none;
    color: var(--code-block-color);
}
.cm-s-inner span.cm-meta {
    color: #BBB529;
}
.cm-s-inner span.cm-number {
    color: #6897BB;
}
.cm-s-inner span.cm-keyword {
    color: #CC7832;
}
.cm-s-inner span.cm-def {
    color: #FFD760;
}
.cm-s-inner span.cm-variable {
    color: #A9B7C6;
}
.cm-s-inner span.cm-variable-2 {
    color: #A9B7C6;
}
.cm-s-inner span.cm-variable-3 {
    color: #9876AA;
}
.cm-s-inner span.cm-type {
    color: #AABBCC;
}
.cm-s-inner span.cm-property {
    color: #FFC66D;
}
.cm-s-inner span.cm-operator {
    color: #A9B7C6;
}
.cm-s-inner span.cm-string {
    color: #6A8759;
}
.cm-s-inner span.cm-string-2 {
    color: #6A8759;
}
.cm-s-inner span.cm-comment {
    color: #787878;
}
.cm-s-inner span.cm-link {
    color: #CC7832;
}
.cm-s-inner span.cm-atom {
    color: #CC7832;
}
.cm-s-inner span.cm-error {
    color: #BC3F3C;
}
.cm-s-inner span.cm-tag {
    color: #E8BF6A;
}
.cm-s-inner span.cm-quote {
    color: #a6e22e;
}
.cm-s-inner span.cm-attribute {
    color: #9876AA;
}
.cm-s-inner span.cm-qualifier {
    color: #6A8759;
}
.cm-s-inner span.cm-bracket {
    color: #E8BF6A;
}
.cm-s-inner span.cm-builtin {
    color: #FF9E59;
}
.cm-s-inner span.cm-special {
    color: #FF9E59;
}
.cm-s-inner span.cm-matchhighlight {
    color: #FFFFFF;
    background-color: rgba(50, 89, 48, .7);
    font-weight: normal;
}
.cm-s-inner span.cm-searching {
    color: #FFFFFF;
    background-color: rgba(61, 115, 59, .7);
    font-weight: normal;
}
.cm-s-inner .CodeMirror-gutters {
    border-right: none;
    border-radius: 2px;
    padding-left: 0.5rem;
    background: var(--bg-color);
}
.cm-s-inner .CodeMirror-linenumber {
    color: #787878;
}
.cm-s-inner .CodeMirror-matchingbracket {
    background-color: #3B514D;
    color: #FFEF28 !important;
}
.cm-s-inner .CodeMirror-selected {
    background: #214283 !important;
}
.cm-s-inner .CodeMirror-selectedtext {
    background: #214283 !important;
}
.cm-s-typora-default .CodeMirror-selectedtext {
    background: var(--select-text-bg-color) !important;
}
.cm-overlay.CodeMirror-selectedtext {
    background: var(--select-text-bg-color) !important;
}
.cm-s-inner div.CodeMirror-cursor {
    border-left: 1px solid var(--code-block-color);
}
.cm-s-inner .cm-header, .cm-s-inner.cm-header {
    color: #FFD760;
}


</style><title>008+limou+2023_08_04+C++STL模板库</title>
</head>
<body class='typora-export os-windows typora-export-show-outline typora-export-collapse-outline'><div class='typora-export-content'>
<div class="typora-export-sidebar"><div class="outline-content"><li class="outline-item-wrapper outline-h1"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1stl-的简介">1.STL 的简介</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h2 outline-item-single"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11stl-的概念">1.1.STL 的概念</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h2 outline-item-single"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#12stl-的版本">1.2.STL 的版本</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h1 outline-item-single"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#5stl-的学习规划">5.STL 的学习规划</a></div><ul class="outline-children"></ul></li></div></div><div id='write'  class=''><div class='md-toc' mdtype='toc'><p class="md-toc-content" role="list"><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n95"><a class="md-toc-inner" href="#1stl-的简介">1.STL 的简介</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n97"><a class="md-toc-inner" href="#11stl-的概念">1.1.STL 的概念</a></span><span role="listitem" class="md-toc-item md-toc-h2" data-ref="n100"><a class="md-toc-inner" href="#12stl-的版本">1.2.STL 的版本</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n135"><a class="md-toc-inner" href="#5stl-的学习规划">5.STL 的学习规划</a></span></p></div><h1 id='1stl-的简介'><span>1.STL 的简介</span></h1><h2 id='11stl-的概念'><span>1.1.STL 的概念</span></h2><p><code>STL</code><span>(</span><code>standard template libaray</code><span> 即：“标准模板库”)是 </span><code>C++</code><span> 标准库的重要组成部分，不仅是一个可复用的组件库，而且是一个包罗数据结构与算法的软件框架。  </span></p><h2 id='12stl-的版本'><span>1.2.STL 的版本</span></h2><ol start='' ><li><p><span>原始版本：</span><code>Alexander Stepanov</code><span>、</span><code>Meng Lee</code><span> 两人在惠普实验室完成了 </span><code>STL</code><span> 的原始版本，本着开源精神，他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码，无需付费。唯一的条件就是也需要向原始版本一样做开源使用。原始版本也叫 </span><code>HP</code><span> 版本，是所有 </span><code>STL</code><span> 实现版本的始祖。</span></p></li><li><p><code>P.J.</code><span> 版本：由 </span><code>P.J.Plauger</code><span> 开发，继承自 </span><code>HP</code><span> 版本，被 </span><code>Windows Visual C++</code><span> 采用，不能公开或修改。缺陷是，可读性比较低，符号命名比较怪异。</span></p></li><li><p><code>RW</code><span> 版本：由 </span><code>Rouge Wage</code><span> 公司开发，继承自 </span><code>HP</code><span> 版本，被 </span><code>C++ Builder</code><span> 采用，不能公开或修改，可读性一般（该编译器后来被微软的 </span><code>VS</code><span> 打败，已经没落）。</span></p></li><li><p><code>SGI</code><span> 版本：由 </span><code>Silicon Graphics Computer Systems</code><span>，</span><code>Inc</code><span> 公司开发，继承自 </span><code>HP</code><span> 版本。被 </span><code>GCC(Linux)</code><span> 采用，可移植性好，可公开、修改甚至贩卖，从命名风格和编程风格上看，阅读性非常高。后面学习 </span><code>STL</code><span> 要阅读部分源代码，主要参考的就是这个版本。</span></p></li></ol><p><span>2.STL 的六大组件</span>
<mark><span>== =</span></mark><span>= ==</span></p><p><code>STL</code><span> 可以划分为六个组件：</span></p><div class="md-diagram-panel md-fences-adv-panel" lang="mermaid"><svg id="mermaidChart2" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 741.2px; margin: auto;" viewBox="-8 -8 741.2000732421875 924.6000366210938" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#mermaidChart2{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaidChart2 .error-icon{fill:#e8e8e8;}#mermaidChart2 .error-text{fill:#f1908e;stroke:#f1908e;}#mermaidChart2 .edge-thickness-normal{stroke-width:2px;}#mermaidChart2 .edge-thickness-thick{stroke-width:3.5px;}#mermaidChart2 .edge-pattern-solid{stroke-dasharray:0;}#mermaidChart2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaidChart2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaidChart2 .marker{fill:#9370DB;stroke:#9370DB;}#mermaidChart2 .marker.cross{stroke:#9370DB;}#mermaidChart2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaidChart2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaidChart2 .cluster-label text{fill:#acb7c4;}#mermaidChart2 .cluster-label span,#mermaidChart2 p{color:#acb7c4;}#mermaidChart2 .label text,#mermaidChart2 span,#mermaidChart2 p{fill:#333;color:#333;}#mermaidChart2 .node rect,#mermaidChart2 .node circle,#mermaidChart2 .node ellipse,#mermaidChart2 .node polygon,#mermaidChart2 .node path{fill:#BDD5EA;stroke:hsl(208, 11.724137931%, 72.9411764706%);stroke-width:1px;}#mermaidChart2 .flowchart-label text{text-anchor:middle;}#mermaidChart2 .node .label{text-align:center;}#mermaidChart2 .node.clickable{cursor:pointer;}#mermaidChart2 .arrowheadPath{fill:#acb7c4;}#mermaidChart2 .edgePath .path{stroke:#9370DB;stroke-width:2.0px;}#mermaidChart2 .flowchart-link{stroke:#9370DB;fill:none;}#mermaidChart2 .edgeLabel{background-color:#f4f4f4;text-align:center;}#mermaidChart2 .edgeLabel rect{opacity:0.5;background-color:#f4f4f4;fill:#f4f4f4;}#mermaidChart2 .labelBkg{background-color:rgba(244, 244, 244, 0.5);}#mermaidChart2 .cluster rect{fill:#e8e8e8;stroke:hsl(0, 0%, 80.9803921569%);stroke-width:1px;}#mermaidChart2 .cluster text{fill:#acb7c4;}#mermaidChart2 .cluster span,#mermaidChart2 p{color:#acb7c4;}#mermaidChart2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:#e8e8e8;border:1px solid hsl(0, 0%, 80.9803921569%);border-radius:2px;pointer-events:none;z-index:100;}#mermaidChart2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaidChart2 :root{--mermaid-alt-font-family:sans-serif;}</style><g><marker id="flowchart-pointEnd" class="marker flowchart" viewBox="0 0 10 10" refX="10" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="flowchart-pointStart" class="marker flowchart" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="flowchart-circleEnd" class="marker flowchart" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="flowchart-circleStart" class="marker flowchart" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="flowchart-crossEnd" class="marker cross flowchart" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="flowchart-crossStart" class="marker cross flowchart" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><g class="root"><g class="clusters"></g><g class="edgePaths"><path d="M43.774244684201,571.9999980926514L100.80000305175781,359.3999996185303L149.8000030517578,359.3999996185303" id="L-A-B-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-B" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M47.69040678974906,571.9999980926514L100.80000305175781,453.1999988555908L141.8000030517578,453.1999988555908" id="L-A-C-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-C" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M67.27121731748937,571.9999980926514L100.80000305175781,546.9999980926514L141.8000030517578,546.9999980926514" id="L-A-D-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-D" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M67.27121731748937,615.7999973297119L100.80000305175781,640.7999973297119L141.8000030517578,640.7999973297119" id="L-A-E-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-E" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M47.69040678974906,615.7999973297119L100.80000305175781,734.5999965667725L149.8000030517578,734.5999965667725" id="L-A-F-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-F" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M43.774244684201,615.7999973297119L100.80000305175781,828.399995803833L125.80000305175781,828.399995803833" id="L-A-G-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-G" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M179.17403178139583,337.5L245.8000030517578,89.0999984741211L285.1999969482422,89.0999984741211" id="L-B-Sequence_Containers-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-B LE-Sequence_Containers" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M482.6000061035156,89.0999984741211L522,89.0999984741211L547,89.0999984741211" id="L-Sequence_Containers-vector-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-Sequence_Containers LE-vector" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M196.8000030517578,343.90620552589155L245.8000030517578,311.59999656677246L270.8000030517578,311.59999656677246" id="L-B-Associative_Containers-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-B LE-Associative_Containers" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M455.39858556427373,289.6999969482422L522,269.29999923706055L594.9999961853027,269.29999923706055" id="L-Associative_Containers-set-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-Associative_Containers LE-set" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M405.8317625019888,333.49999618530273L522,449.5L547,449.5" id="L-Associative_Containers-multiset-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-Associative_Containers LE-multiset" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M178.08526524057226,381.29999923706055L245.8000030517578,691.1999950408936L290,691.1999950408936" id="L-B-Container_Adapters-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-B LE-Container_Adapters" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M455.39858556427373,669.2999954223633L522,648.8999977111816L575.7999992370605,648.8999977111816" id="L-Container_Adapters-K-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-Container_Adapters LE-K" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M405.0940434071629,713.0999946594238L522,833.9000015258789L561.3999938964844,833.9000015258789" id="L-Container_Adapters-M-0" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-Container_Adapters LE-M" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default default flowchart-label" id="flowchart-A-58" transform="translate(37.900001525878906, 593.8999977111816)"><rect class="basic label-container" style="" rx="0" ry="0" x="-37.89999961853027" y="-21.90000057220459" width="75.79999923706055" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-30.399999618530273, -14.40000057220459)"><rect></rect><foreignObject width="60.79999923706055" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">STL组成</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-B-60" transform="translate(173.3000030517578, 359.3999996185303)"><rect class="basic label-container" style="" rx="0" ry="0" x="-23.5" y="-21.90000057220459" width="47" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-16, -14.40000057220459)"><rect></rect><foreignObject width="32" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">容器</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-C-62" transform="translate(173.3000030517578, 453.1999988555908)"><rect class="basic label-container" style="" rx="0" ry="0" x="-31.5" y="-21.90000057220459" width="63" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-24, -14.40000057220459)"><rect></rect><foreignObject width="48" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">迭代器</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-D-64" transform="translate(173.3000030517578, 546.9999980926514)"><rect class="basic label-container" style="" rx="0" ry="0" x="-31.5" y="-21.90000057220459" width="63" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-24, -14.40000057220459)"><rect></rect><foreignObject width="48" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">适接器</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-E-66" transform="translate(173.3000030517578, 640.7999973297119)"><rect class="basic label-container" style="" rx="0" ry="0" x="-31.5" y="-21.90000057220459" width="63" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-24, -14.40000057220459)"><rect></rect><foreignObject width="48" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">仿函数</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-F-68" transform="translate(173.3000030517578, 734.5999965667725)"><rect class="basic label-container" style="" rx="0" ry="0" x="-23.5" y="-21.90000057220459" width="47" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-16, -14.40000057220459)"><rect></rect><foreignObject width="32" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">算法</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-G-70" transform="translate(173.3000030517578, 828.399995803833)"><rect class="basic label-container" style="" rx="0" ry="0" x="-47.5" y="-21.90000057220459" width="95" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-40, -14.40000057220459)"><rect></rect><foreignObject width="80" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">空间配置器</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-Sequence_Containers-72" transform="translate(383.9000015258789, 89.0999984741211)"><rect class="basic label-container" style="" rx="0" ry="0" x="-98.70000457763672" y="-21.90000057220459" width="197.40000915527344" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-91.20000457763672, -14.40000057220459)"><rect></rect><foreignObject width="182.40000915527344" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">Sequence Containers</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-vector-74" transform="translate(636.0999984741211, 89.0999984741211)"><circle style="" rx="0" ry="0" r="89.0999984741211" width="178.1999969482422" height="43.80000114440918"></circle><g class="label" style="" transform="translate(-81.5999984741211, -14.40000057220459)"><rect></rect><foreignObject width="163.1999969482422" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">vector/deque/list</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-Associative_Containers-76" transform="translate(383.9000015258789, 311.59999656677246)"><rect class="basic label-container" style="" rx="0" ry="0" x="-113.0999984741211" y="-21.90000057220459" width="226.1999969482422" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-105.5999984741211, -14.40000057220459)"><rect></rect><foreignObject width="211.1999969482422" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">Associative Containers</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-set-78" transform="translate(636.0999984741211, 269.29999923706055)"><circle style="" rx="0" ry="0" r="41.10000228881836" width="82.20000457763672" height="43.80000114440918"></circle><g class="label" style="" transform="translate(-33.60000228881836, -14.40000057220459)"><rect></rect><foreignObject width="67.20000457763672" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">set/map</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-multiset-80" transform="translate(636.0999984741211, 449.5)"><circle style="" rx="0" ry="0" r="89.0999984741211" width="178.1999969482422" height="43.80000114440918"></circle><g class="label" style="" transform="translate(-81.5999984741211, -14.40000057220459)"><rect></rect><foreignObject width="163.1999969482422" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">multiset/multimap</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-Container_Adapters-82" transform="translate(383.9000015258789, 691.1999950408936)"><rect class="basic label-container" style="" rx="0" ry="0" x="-93.9000015258789" y="-21.90000057220459" width="187.8000030517578" height="43.80000114440918"></rect><g class="label" style="" transform="translate(-86.4000015258789, -14.40000057220459)"><rect></rect><foreignObject width="172.8000030517578" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">Container Adapters</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-K-84" transform="translate(636.0999984741211, 648.8999977111816)"><circle style="" rx="0" ry="0" r="60.29999923706055" width="120.5999984741211" height="43.80000114440918"></circle><g class="label" style="" transform="translate(-52.79999923706055, -14.40000057220459)"><rect></rect><foreignObject width="105.5999984741211" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">stack/queue</span></div></foreignObject></g></g><g class="node default default flowchart-label" id="flowchart-M-86" transform="translate(636.0999984741211, 833.9000015258789)"><circle style="" rx="0" ry="0" r="74.70000457763672" width="149.40000915527344" height="43.80000114440918"></circle><g class="label" style="" transform="translate(-67.20000457763672, -14.40000057220459)"><rect></rect><foreignObject width="134.40000915527344" height="28.80000114440918"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="nodeLabel">priority_queue</span></div></foreignObject></g></g></g></g></g></svg></div><p>&nbsp;</p><blockquote><p><span>补充：“容器”实际上就是 </span><code>C++</code><span> 的“数据结构”。</span></p></blockquote><p><span>3.STL 的学习境界</span>
<mark><span>== =</span></mark><span>= ==</span></p><ol start='' ><li><p><span>能熟用 </span><code>STL</code><span> 语法</span></p></li><li><p><span>明白 </span><code>STL</code><span> 的底层原理</span></p></li><li><p><span>能够根据需求来自主拓展、扩充 </span><code>STL</code></p></li></ol><p><span>4.STL 的缺陷</span>
<mark><span>== =</span></mark><span>=</span></p><p><span>下面是 </span><code>[2020]</code><span> 年前的结论，未来的 </span><code>C++</code><span> 可能会解决这些缺陷...</span></p><ol start='' ><li><p><span>更新速度：这里值得吐槽的是 </span><code>STL</code><span> 的更新速度，比较靠谱的上一版本是 </span><code>C++98</code><span>，</span><code>C++03</code><span> 是一些基本修订，</span><code>13</code><span> 年后 </span><code>C++11</code><span> 才推出，</span><code>STL</code><span> 才得以进一步更新</span></p></li><li><p><span>线程安全：</span><code>STL</code><span> 到现在都没有支持线程安全，并发环境下需要自己加锁，而且锁的粒度比较大</span></p></li><li><p><span>过于效率：</span><code>STL</code><span> 太追求效率了，导致内部比较复杂，例如：类型萃取、迭代器萃取等</span></p></li><li><p><span>代码膨胀：</span><code>STL</code><span> 的使用会有代码膨胀的问题，这是模板语法本身导致的</span></p></li></ol><h1 id='5stl-的学习规划'><span>5.STL 的学习规划</span></h1><p><span>之后我会带您了解 </span><code>STL(C++98)</code><span> 的重要容器，并在所有容器都大致讲解完毕后，补充一些 </span><code>C++11</code><span> 的语法知识，然后讲解 </span><code>STL(C++98)</code><span> 和 </span><code>STL(C++11)</code><span> 的差别...</span></p></div></div>

<script>(function(){function e(e,n,i){document.addEventListener(e,function(e){if(!e.defaultPrevented)for(var t=e.target;t&&t!=this;t=t.parentNode)if(t.matches(n)){!1===i.call(t,e)&&(e.preventDefault(),e.stopPropagation());break}},!1)}var t=document.body.parentElement,i=[],r=null,o=document.body.classList.contains("typora-export-collapse-outline");function a(){return t.scrollTop}e("click",".outline-expander",function(e){var t=this.closest(".outline-item-wrapper").classList;return t.contains("outline-item-open")?t.remove("outline-item-open"):t.add("outline-item-open"),u(),!1}),e("click",".outline-item",function(e){var t=this.querySelector(".outline-label");location.hash="#"+t.getAttribute("href"),o&&((t=this.closest(".outline-item-wrapper").classList).contains("outline-item-open")||t.add("outline-item-open"),d(),t.add("outline-item-active"))});function s(){var e=a();r=null;for(var t=0;t<i.length&&i[t][1]-e<60;t++)r=i[t]}function n(){c=setTimeout(function(){var n;i=[],n=a(),document.querySelector("#write").querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(e=>{var t=e.getAttribute("id");i.push([t,n+e.getBoundingClientRect().y])}),s(),u()},300)}var l,c,d=function(){document.querySelectorAll(".outline-item-active").forEach(e=>e.classList.remove("outline-item-active")),document.querySelectorAll(".outline-item-single.outline-item-open").forEach(e=>e.classList.remove("outline-item-open"))},u=function(){if(r&&(d(),t=document.querySelector('.outline-label[href="#'+(CSS.escape?CSS.escape(r[0]):r[0])+'"]')))if(o){var e=t.closest(".outline-item-open>ul>.outline-item-wrapper");if(e)e.classList.add("outline-item-active");else{for(var t,n=(t=t.closest(".outline-item-wrapper")).parentElement.closest(".outline-item-wrapper");n;)n=(t=n).parentElement.closest(".outline-item-wrapper");t.classList.add("outline-item-active")}}else t.closest(".outline-item-wrapper").classList.add("outline-item-active")};window.addEventListener("scroll",function(e){l&&clearTimeout(l),l=setTimeout(function(){s(),u()},300)});window.addEventListener("resize",function(e){c&&clearTimeout(c),n()}),n()})();</script></body>
</html>